package poker;
import java.util.LinkedList;
import java.util.Scanner;

public class Gracz extends Thread
{
	Thread gracz;							//watek gracza
	private OstatniaKarta last_card;		//ostatnio wybrana karta z talii
	private Karta karty[];					//karty gracza
	private Talia talia;					//talia wylosowanych kart
	LinkedList<Integer> lista;				//lista kart do podmiany itp.
	private Scanner skaner;					//skaner do pobierania danych
	private Karta cards[];					//karty do zakonczenia gry
	private volatile boolean exit;
	private static boolean wymienil;
	
	public Gracz(String nazwa, OstatniaKarta last_card,
			Talia talia, Karta cards[])
	{
		wymienil = false;
		this.last_card = last_card;
		gracz = new Thread(nazwa);
		karty = new Karta [5];
		for (int i = 0; i < 5; ++i)
			karty[i] = talia.zwroc_karte(last_card.wartosc_gory() + i, gracz.getName());
		last_card.dodaj(5);
		this.talia = talia;
		this.cards = cards;
		lista = new LinkedList<Integer>();
		skaner = new Scanner(System.in);
		exit = false;
	}
	
	public void run()
	{
		while (!exit)
		{
			pobierz_ruch();
		}
		skaner.close();
	}

	private void zamien_karty(LinkedList<Integer> do_zamiany)
	{
		int zakres = do_zamiany.size();
		for (int i = 0; i < zakres; ++i)
		{
			if (last_card.wartosc_gory() < 52)
			{
				karty[(int) lista.get(i)] = talia.zwroc_karte(
						last_card.wartosc_gory(), gracz.getName());
				last_card.dodaj(1);
			}
			else
			{
				System.out.println("Brak kart w talii");
			}
		}
		wymienil = true;
		lista.clear();
	}
	
	private void czekaj(long czas)
	{
		try
		{
			if (czas > 0)
				Thread.sleep(czas);
		}
		catch (InterruptedException ie)
		{
			System.out.println("Wystąpił błąd:\n" + ie.getMessage());
		}
	}
	
	public void pobierz_ruch()
	{
		System.out.println("\nCo chcesz wykonać: \n1 by wymienic karty\n"
							+ "2 by wyswietlic karty\n3 by sprawdzić\n"
							+ "kazda inna oprocz by poczekac\n");
			
		int liczba = 0;
		
		if (skaner.hasNextInt())
			liczba = skaner.nextInt();
		
		if (liczba == 1)
		{		
			ObslugaWatkow.wyswietl_karty(gracz, karty);
			System.out.println("Podaj indeks twojej karty do podmiany, indeks "
					+ "wiekszy od ilosci twoich kart lub mniejszy od 0 konczy");
			
			while (liczba > -1 && liczba < 5)
			{
				if (skaner.hasNextInt())
					liczba = skaner.nextInt();
				if (liczba > -1 && liczba < 5 && lista.size() < 5)
					lista.add(liczba);
			}
			
			if (!lista.isEmpty() && !wymienil)
				zamien_karty(lista);
			ObslugaWatkow.wyswietl_karty(gracz, karty);
			czekaj(1000);
		}
		else if (liczba == 2)
		{
			ObslugaWatkow.wyswietl_karty(gracz, karty);
			czekaj(1000);
		}
		else if (liczba == 3)
		{
			ObslugaWatkow.sprawdz(last_card, cards, karty);
			exit = true;
			czekaj(100);
		}
		else 
			czekaj(5000);
	}
}